#include "PajaritoAzul.h"

using namespace TP::Juego::Arena::Actores;

PajaritoAzul::PajaritoAzul() : Pajarito(PAJARITOAZUL) {
	this->setVida(vida_pajaro_azul);
}

PajaritoAzul::PajaritoAzul(const string& pNombre) : Pajarito(pNombre) {
	this->setVida(vida_pajaro_azul);
}

PajaritoAzul::~PajaritoAzul() { }

int PajaritoAzul::getPuntaje() {
	return puntaje_pajaro_azul;
}

TiXmlElement* PajaritoAzul::aElementoXML() {
	TiXmlElement * element = new TiXmlElement(PAJARITOAZUL);

	element->SetAttribute("nombre", this->Nombre().c_str());
	element->SetDoubleAttribute("vida", this->getVida());

	if (NULL == this->getTrayectoria())
		element->LinkEndChild(new TiXmlElement("NULL"));
	else
		element->LinkEndChild(this->getTrayectoria()->aElementoXML());

	return element;
}

void PajaritoAzul::deElementoXML(TiXmlElement* pElemento) {
	if (strcmp(pElemento->Value(), PAJARITOAZUL) == 0) {
		// Hidrato los atributos de tipo nativos.
		this->setNombre(pElemento->Attribute("nombre"));
		double tmp;
		pElemento->Attribute("vida", &tmp);
		this->setVida(tmp);

		// Hidrato la trayectoria.
		Trayectoria* trayectoria = NULL;
		if ("NULL" != pElemento->FirstChildElement()->ValueTStr()) {
			trayectoria = new Trayectoria();
			trayectoria->deElementoXML(pElemento->FirstChildElement());
		}
		this->setTrayectoria(trayectoria);
	}
}

double PajaritoAzul::getAlturaRebote() const {
	return rebote_pajaro_azul;
}

double PajaritoAzul::getRadio() {
	return radio_pajaro_azul;
}

// Retorna los puntos del actor por ser destruido.
int PajaritoAzul::getPuntosDestruccion() {
	return puntaje_pajaro_azul;
}

// Retorna el daño que le hace el actor a un cerdito.
double PajaritoAzul::getDanioContraCerdito() {
	return danio_pajaro_azul_cerdito;
}

// Retorna el daño que le hace el actor a una superficie.
double PajaritoAzul::getDanioContraSuperficie() {
	return danio_pajaro_azul_superficies;
}

// Retorna el daño que le hace el actor a un pajarito.
double PajaritoAzul::getDanioContraPajarito() {
	return 0;
}